/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ihc.terminalbanco.gui.events;

import ihc.terminalbanco.gui.panels.AjudaPane;
import ihc.terminalbanco.gui.panels.AvisoPainel;
import ihc.terminalbanco.gui.panels.ConstructMenusPanelsMelhorIdade;
import ihc.terminalbanco.gui.panels.InformeAgendaPane;
import ihc.terminalbanco.gui.panels.RotulosInterface;
import ihc.terminalbanco.gui.panels.SaldoPaneMelhorIdade;
import ihc.terminalbanco.gui.panels.SaqueOutroValorPane;
import ihc.terminalbanco.gui.panels.SegurancaPane;
import ihc.terminalbanco.testDatas.Datas;
import ihc.terminalbanco.testDatas.FileUtilities;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author Rafael
 */
public class Events implements ActionListener, RotulosInterface {

        private JPanel menuPrincipalPanel, extratoMenuPanel, servicosMenuPanel,
                demonstrativoMenuPanel, emprestimoMenuPanel, pagamentoMenuPanel,
                saqueMenuPanel,saldoPanel, agendaPanel, informePanel,
                codigoBarrasPanel, saqueOutroValorPane, senhaAdicionalPane,
                outrosExtratosPane, maisServicosPanel, outrosPagamentosPane,
                ajudaPanel, bemVindoMenuPanel;
        public static JPanel atualPanel;
        AvisoPainel extratoAvisoPanel, saqueAvisoPanel, confirmarOperacaoPanel;
        public static List<JPanel> anteriorPanels = new ArrayList<JPanel>();
        JFrame frameInterface;
        Datas coletandoDados;

        public void actionPerformed(ActionEvent e) {              

                String nomeEvento = e.getActionCommand();
                /*Início Menu Eventos*/
                if(nomeEvento.contains(saldoString) && Events.atualPanel.equals(this.menuPrincipalPanel)){
                    atualizaFrameInterface(this.saldoPanel);
                } else if (nomeEvento.contains(servicosString) && !nomeEvento.contains(maisServicosString)) {
                    atualizaFrameInterface(this.servicosMenuPanel);
                } else if (nomeEvento.contains(emprestimosString)) {
                    atualizaFrameInterface(this.emprestimoMenuPanel);
                } else if (nomeEvento.contains(pagamentosString) && !Events.atualPanel.equals(this.pagamentoMenuPanel)) {
                    atualizaFrameInterface(this.pagamentoMenuPanel);
                } else if (nomeEvento.contains(agendaString) && Events.atualPanel.equals(this.pagamentoMenuPanel)) {
                    atualizaFrameInterface(agendaPanel);
                } else if (nomeEvento.contains(extratoString) && this.atualPanel.equals(this.menuPrincipalPanel)) {
                    atualizaFrameInterface(extratoMenuPanel);
                } else if (nomeEvento.contains(saqueString)) {
                    atualizaFrameInterface(saqueMenuPanel);
                }
                /*Fim Menu Eventos*/
                /*Início Saldo*/
                else if (nomeEvento.contains(imprimirString) && atualPanel.equals(saldoPanel)) {
                    atualizaFrameInterface(confirmarOperacaoPanel);
                } else if (nomeEvento.contains(confirmarString) && atualPanel.equals(saldoPanel)) {
                    atualizaFrameInterface(confirmarOperacaoPanel);
                }
                /*1 - Imprimir*/
                /*Fim Saldo*/
                /*Início Extrato Eventos*/
                else if (nomeEvento.contains(complExtratoStringMelhorIdade)) {
                    atualizaFrameInterface(extratoAvisoPanel);/*
                    this.extratoAvisoPanel.inicializaTempoEProximoPainel(10, this.menuPrincipalPanel);
                    Thread thread = new Thread(extratoAvisoPanel);
                    try {
                        thread.sleep(3000);
                        thread.run();
                    } catch (InterruptedException ex) {
                        Logger.getLogger(Events.class.getName()).log(Level.SEVERE, null, ex);
                    }*/
                } else if (nomeEvento.contains(semanalExtratoString)) {
                    atualizaFrameInterface(extratoAvisoPanel);
                    //this.extratoAvisoPanel.esperaETroca(10, this.menuPrincipalPanel);
                }else if (nomeEvento.contains(quinzenalExtrato)) {
                    atualizaFrameInterface(extratoAvisoPanel);
                    //this.extratoAvisoPanel.esperaETroca(10, this.menuPrincipalPanel);
                } else if (nomeEvento.contains(mensalExtratoString)) {
                    atualizaFrameInterface(extratoAvisoPanel);
                    //this.extratoAvisoPanel.esperaETroca(10, this.menuPrincipalPanel);
                } else if (nomeEvento.contains(totalExtratoString)) {
                    atualizaFrameInterface(extratoAvisoPanel);
                    //this.extratoAvisoPanel.esperaETroca(10, this.menuPrincipalPanel);
                } else if (nomeEvento.contains(emprestimoExtratoString)) {
                    atualizaFrameInterface(extratoAvisoPanel);
                    //this.extratoAvisoPanel.esperaETroca(10, this.menuPrincipalPanel);
                } else if (nomeEvento.contains(saldoMesExtratoStringMelhorIdade)) {
                    atualizaFrameInterface(extratoAvisoPanel);
                    //this.extratoAvisoPanel.esperaETroca(10, this.menuPrincipalPanel);
                } else if(nomeEvento.contains(outrosExtratosString)){
                    atualizaFrameInterface(this.outrosExtratosPane);
                
                /*Fim Extrato Eventos*/
                
                /*Início Saque Eventos*/

                } else if (nomeEvento.contains(primeiroValorString)) {
                    atualizaFrameInterface(saqueAvisoPanel);
                } else if (nomeEvento.contains(segundoValorString)) {
                    atualizaFrameInterface(saqueAvisoPanel);
                } else if (nomeEvento.contains( terceiroValorString)) {
                    atualizaFrameInterface(saqueAvisoPanel);
                } else if (nomeEvento.contains(quartoValorString)) {
                    atualizaFrameInterface(saqueAvisoPanel);
                } else if (nomeEvento.contains(quintoValorString)) {
                    atualizaFrameInterface(saqueAvisoPanel);
                } else if (nomeEvento.contains(outroValorString)) {
                    atualizaFrameInterface(this.saqueOutroValorPane);
                }

                /*Fim Saque Eventos*/
                /*saqueOutroValorPane*/
                else if (nomeEvento.contains(confirmarString) && atualPanel.equals(saqueOutroValorPane)) {
                    atualizaFrameInterface(confirmarOperacaoPanel);
                }

                /*saqueOutroValorPane*/

                /*Início Empréstimos Eventos*/

                 else if (nomeEvento.contains(creditoUmMinutoString)) {
                    atualizaFrameInterface(confirmarOperacaoPanel);
                } else if (nomeEvento.contains(creditoPessoalString)) {
                    atualizaFrameInterface(confirmarOperacaoPanel);
                }

                /*Fim Empréstimos Eventos*/
                /*Início Pagamentos Eventos*/

                else if (nomeEvento.contains(codigoBarrasString)) {
                    atualizaFrameInterface(codigoBarrasPanel);
                } else if (nomeEvento.contains(icmsString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(gpsString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(comprovanteString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if(nomeEvento.contains(outrosPagamentosString)){
                    atualizaFrameInterface(outrosPagamentosPane);
                }

                /*Fim Pagamentos Eventos*/
                /*Início Serviços Eventos*/
                else if (nomeEvento.contains(maisServicosString)) {
                    atualizaFrameInterface(this.maisServicosPanel);
                }
                else if (nomeEvento.contains(demonstrativosString) &&
                        atualPanel.equals(servicosMenuPanel)) {
                    atualizaFrameInterface(this.demonstrativoMenuPanel);
                } else if (nomeEvento.contains(transferenciaString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(ipvaString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(senhasString)) {
                    atualizaFrameInterface(this.senhaAdicionalPane);
                } else if (nomeEvento.contains(recargaString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(agendaString)
                        && Events.atualPanel.equals(this.servicosMenuPanel)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } 

                /*Fim Serviços Eventos*/
                /*Início Senha Adicional Eventos*/
                else if (nomeEvento.contains(confirmarString) && Events.atualPanel.equals(senhaAdicionalPane)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                }
                /*Fim Senha Adicional Eventos*/
                /*Início Demonstrativos Eventos*/

                else if (nomeEvento.contains(contraChequeString) ||
                        nomeEvento.contains(outrosDemonstrativosString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(tarifasString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(complTeleservString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(reciboLicString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(depositoPrazoString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(fundoInvestimentos)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(outrosDemonstrativosString)){
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                }

                /*Fim Demonstrativos Eventos*/
                /*Início Código de Barras Events*/

                else if (nomeEvento.contains(leituraString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(digitacaoString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                }

                /*Fim  Código de Barras Events*/
                /*Início Agenda Events*/

                else if (nomeEvento.contains(agendamentoString)) {
                    atualizaFrameInterface(this.informePanel);
                } else if (nomeEvento.contains(extratoString) && this.atualPanel.equals(this.agendaPanel)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(comprovantesString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                } else if (nomeEvento.contains(exclusaoString)) {
                    atualizaFrameInterface(this.confirmarOperacaoPanel);
                }
                /*Fim Agenda Events*/
                /*Início Bem Vindo Panel Events*/
                else if (bemVindoMenuPanel.equals(atualPanel)){
                    if(nomeEvento.contains(insiraCartaoString)){
                        //coletandoDados.setStartTime();
                        atualizaFrameInterface(this.menuPrincipalPanel);
                    }
                }
                /*Fim Bem Vindo Panel Events*/

                /*Início Confirmar Button Events*/
                 else if(nomeEvento.contains(confirmarString) && atualPanel.equals(ajudaPanel)){
                   voltarFrameInterface();
                } else if(nomeEvento.contains(confirmarString) && !atualPanel.equals(ajudaPanel)){
                   atualizaFrameInterface(this.menuPrincipalPanel);
                } else if(nomeEvento.contains(voltarString)){
                    voltarFrameInterface();
                } else if (nomeEvento.contains(ajudaString)){
                    atualizaFrameInterface(ajudaPanel);
                } else if (nomeEvento.contains(encerrarString)){
                    coletandoDados.incrementNumberOfCancels();
                    atualizaFrameInterface(bemVindoMenuPanel);
                }

        
        System.out.println(nomeEvento);
        }

    public JPanel getDemonstrativoMenuPanel() {
        return demonstrativoMenuPanel;
    }

    public void setDemonstrativoMenuPanel(JPanel DemonstrativoMenuPanel) {
        this.demonstrativoMenuPanel = DemonstrativoMenuPanel;
    }

    public JPanel getEmprestimoMenuPanel() {
        return emprestimoMenuPanel;
    }

    public void setEmprestimoMenuPanel(JPanel EmprestimoMenuPanel) {
        this.emprestimoMenuPanel = EmprestimoMenuPanel;
    }

    public JPanel getSaqueMenuPanel() {
        return saqueMenuPanel;
    }

    public void setSaqueMenuPanel(JPanel SaqueMenuPanel) {
        this.saqueMenuPanel = SaqueMenuPanel;
    }

    public JPanel getAtualPanel() {
        return atualPanel;
    }

    public void setAtualPanel(JPanel atualPanel) {
        this.atualPanel = atualPanel;
    }

    public JPanel getExtratoMenuPanel() {
        return extratoMenuPanel;
    }

    public void setExtratoMenuPanel(JPanel extratoMenuPanel) {
        this.extratoMenuPanel = extratoMenuPanel;
    }

    public JPanel getMenuPrincipalPanel() {
        return menuPrincipalPanel;
    }

    public void setMenuPrincipalPanel(JPanel menuPrincipalPanel) {
        this.menuPrincipalPanel = menuPrincipalPanel;
    }

    public JPanel getPagamentoMenuPanel() {
        return pagamentoMenuPanel;
    }

    public void setPagamentoMenuPanel(JPanel pagamentoMenuPanel) {
        this.pagamentoMenuPanel = pagamentoMenuPanel;
    }

    public JPanel getServicosMenuPanel() {
        return servicosMenuPanel;
    }

    public void setServicosMenuPanel(JPanel servicosMenuPanel) {
        this.servicosMenuPanel = servicosMenuPanel;
    }

    public JFrame getFrameInterface() {
        return frameInterface;
    }

    public void setFrameInterface(JFrame frameInterface) {
        this.frameInterface = frameInterface;
    }

    public JPanel getAgendaPanel() {
        return agendaPanel;
    }

    public void setAgendaPanel(JPanel agendaPanel) {
        this.agendaPanel = agendaPanel;
    }

    public JPanel getSaldoPanel() {
        return saldoPanel;
    }

    public void setSaldoPanel(JPanel saldoPanel) {
        this.saldoPanel = saldoPanel;
    }

    public AvisoPainel getExtratoAvisoPanel() {
        return extratoAvisoPanel;
    }

    public void setExtratoAvisoPanel(AvisoPainel extratoAvisoPanel) {
        this.extratoAvisoPanel = extratoAvisoPanel;
    }

    public AvisoPainel getSaqueAvisoPanel() {
        return saqueAvisoPanel;
    }

    public void setSaqueAvisoPanel(AvisoPainel saqueAvisoPanel) {
        this.saqueAvisoPanel = saqueAvisoPanel;
    }

    public JPanel getCodigoBarrasPanel() {
        return codigoBarrasPanel;
    }

    public void setCodigoBarrasPanel(JPanel codigoBarrasPanel) {
        this.codigoBarrasPanel = codigoBarrasPanel;
    }

    public JPanel getInformePanel() {
        return informePanel;
    }

    public void setInformePanel(JPanel informePanel) {
        this.informePanel = informePanel;
    }

    public JPanel getSaqueOutroValorPane() {
        return saqueOutroValorPane;
    }

    public void setSaqueOutroValorPane(JPanel saqueOutroValorPane) {
        this.saqueOutroValorPane = saqueOutroValorPane;
    }

    public JPanel getSenhaAdicionalPane() {
        return senhaAdicionalPane;
    }

    public void setSenhaAdicionalPane(JPanel senhaAdicionalPane) {
        this.senhaAdicionalPane = senhaAdicionalPane;
    }

    public JPanel getOutrosExtratosPane() {
        return outrosExtratosPane;
    }

    public void setOutrosExtratosPane(JPanel outrosExtratosPane) {
        this.outrosExtratosPane = outrosExtratosPane;
    }

    public JPanel getMaisServicosPanel() {
        return maisServicosPanel;
    }

    public void setMaisServicosPanel(JPanel maisServicosPanel) {
        this.maisServicosPanel = maisServicosPanel;
    }

    public JPanel getOutrosPagamentosPane() {
        return outrosPagamentosPane;
    }

    public void setOutrosPagamentosPane(JPanel outrosPagamentosPane) {
        this.outrosPagamentosPane = outrosPagamentosPane;
    }

    public JPanel getAjudaPanel() {
        return ajudaPanel;
    }

    public void setAjudaPanel(JPanel ajudaPanel) {
        this.ajudaPanel = ajudaPanel;
    }

    public AvisoPainel getConfirmarOperacao() {
        return confirmarOperacaoPanel;
    }

    public void setConfirmarOperacao(AvisoPainel confirmarOperacao) {
        this.confirmarOperacaoPanel = confirmarOperacao;
    }

    public JPanel getBemVindoMenuPanel() {
        return bemVindoMenuPanel;
    }

    public void setBemVindoMenuPanel(JPanel bemVindoMenuPanel) {
        this.bemVindoMenuPanel = bemVindoMenuPanel;
    }

    public void atualizaFrameInterface(JPanel panelSelecionado) {

        this.coletandoDados.incrementNumberOfPanels();
        if(Events.atualPanel.equals(ajudaPanel)){
            this.coletandoDados.incrementNumberOfHelps();
        }

        this.frameInterface.setContentPane(panelSelecionado);
        this.frameInterface.validate();
        Events.anteriorPanels.add(Events.atualPanel);
        Events.atualPanel = panelSelecionado;
        this.frameInterface.setFocusable(true);
    }

    public void voltarFrameInterface(){
        this.coletandoDados.incrementNumberOfBacks();
        int ultimaPosicaoArray = Events.anteriorPanels.size() - 1;
        if (ultimaPosicaoArray >= 0) {
            JPanel panelSelecionado = Events.anteriorPanels.remove(ultimaPosicaoArray);
            this.frameInterface.setContentPane(panelSelecionado);
            this.frameInterface.validate();
            Events.atualPanel = panelSelecionado;
            this.frameInterface.setFocusable(true);
        }
    }

    private void inicializaPanelsMelhorIdade(KeyActionsMelhorIdade keyActions){
        ConstructMenusPanelsMelhorIdade.actionListener = this;
        ConstructMenusPanelsMelhorIdade.keyListener = keyActions;
        this.setSaqueMenuPanel(ConstructMenusPanelsMelhorIdade.constructSaqueMenu());
        this.setServicosMenuPanel(ConstructMenusPanelsMelhorIdade.constructServicosMenu());
        this.setDemonstrativoMenuPanel(ConstructMenusPanelsMelhorIdade.constructDemonstrativoMenu());
        this.setEmprestimoMenuPanel(ConstructMenusPanelsMelhorIdade.constructEmprestimoMenu());
        this.setPagamentoMenuPanel(ConstructMenusPanelsMelhorIdade.constructPagamentosMenu());
        this.setExtratoMenuPanel(ConstructMenusPanelsMelhorIdade.constructExtratoMenu());
        this.setAgendaPanel(ConstructMenusPanelsMelhorIdade.constructAgendaMenu());
        this.setCodigoBarrasPanel(ConstructMenusPanelsMelhorIdade.constructCodigoBarrasMenu());
        this.setSaqueOutroValorPane(new SaqueOutroValorPane(this, keyActions, ConstructMenusPanelsMelhorIdade.fonte));
        this.setSenhaAdicionalPane(new SegurancaPane(this, ConstructMenusPanelsMelhorIdade.fonte));
        this.setOutrosExtratosPane(ConstructMenusPanelsMelhorIdade.constructOutrosExtratoMenu());
        this.setMaisServicosPanel(ConstructMenusPanelsMelhorIdade.constructMaisServicosMenu());
        this.setOutrosPagamentosPane(ConstructMenusPanelsMelhorIdade.constructOutrosPagamentosMenu());
        this.saldoPanel = new SaldoPaneMelhorIdade(this);
        this.extratoAvisoPanel = new AvisoPainel(this, keyActions, "IMPRIMINDO EXTRATO","",
                "\tAguarde um momento.\n\tSua impressão está sendo realizada.\n\tRetire o seu comprovante e confirme a operação.\n\tObrigado.");
        this.saqueAvisoPanel = new AvisoPainel(this, keyActions, "RETIRE SEU DINHEIRO\n","",
                "\n\tSeu Dinheiro esta disponível.\n\tVocê já pode retirá-lo.\n\tApós clique em confirmar.\n\tObrigado.");
        this.confirmarOperacaoPanel = new AvisoPainel(this, keyActions, "OPERAÇÃO CONCLUÍDA\n","",
                "\n\tVocê deseja realizar mais alguma operação?\n\tSelecione Confirmar, para realizar mais operações e Encerrar para finalizar.");
      //  this.this.sairButton.setText(texto);
        this.informePanel = new InformeAgendaPane(this);
        this.ajudaPanel = new AjudaPane(this, keyActions, ConstructMenusPanelsMelhorIdade.fonte);
    }

    public Events(KeyActionsMelhorIdade keyActions, String perfil, Datas coletandoDados) {
        /*Utilizar algo para identificar perfil do usuário*/
        if(perfil.equals("Melhor Idade")){
            this.inicializaPanelsMelhorIdade(keyActions);
        }
        this.coletandoDados = coletandoDados;
    }
}
